package com.shujia.share;

public class NumberCount {
    public int count;

    /*
    synchronized 可以保证原子性, 可以理解成一把锁, 一个线程获取到了执行权
    其他的线程要等待, 等待获取到锁的线程执行完毕, 释放锁,
    其他的线程再来竞争锁的使用权

    synchronized 如果写在方法上面, 指的是整个方法里面的代码都是同步代码, 锁的是this对象
     */
    public void incr() {
        synchronized (this) {
         /*
        1, 先把count从主内存读取到工作内存
        2, 从工作内存里面读取count的值, 交由cpu 自增
        3, 把数据先写入到工作内存, 最后在写入到主内存
        不同的线程对应的工作内存是隔离开的, 不共享
        多个线程只能通过主内存来读写共享资源
         */
            count++;
        }
    }


    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}
